package com.patter.demo.singleton;

/**
 * @Author create by xcb 2023/1/29 14:48
 */
public class Singleton {

    private static Singleton instance;
    /**
     * 双检锁/双重校验锁（DCL，即 double-checked locking）
     */
    private volatile static Singleton singleton;

    /**
     * 懒汉式 线程不安全
     */
//    public static Singleton getInstance() {
//        if (instance == null) {
//            instance = new Singleton();
//        }
//        return instance;
//    }

    /**
     * 懒汉式 线程安全
     */
//    public static synchronized Singleton getInstance() {
//        if (instance == null) {
//            instance = new Singleton();
//        }
//        return instance;
//    }

    /**
     * 饿汉式
     */
//    public static Singleton getInstance() {
//        return instance;
//    }
    private Singleton() {
    }

//    public static Singleton getSingleton() {
//        if (singleton == null) {
//            synchronized (Singleton.class) {
//                if (singleton == null) {
//                    singleton = new Singleton();
//                }
//            }
//        }
//        return singleton;
//    }

    /**
     * 登记式/静态内部类
     */
//    private static class SingletonHolder {
//        private static final Singleton INSTANCE = new Singleton();
//    }
//    public static final Singleton getInstance() {
//        return SingletonHolder.INSTANCE;
//    }

    /**
     * 枚举
     */
//    public enum Singleton {
//        INSTANCE;
//        public void whateverMethod() {
//        }
//    }


}
